home *** CD-ROM | disk | FTP | other *** search
- /*
- File: Show Movie.c
-
- Contains: main and event loop
-
- Allows you to open and display movies
- in a window.
-
- Written by: Jason Hodges-Harris & Don Swatman
-
- Copyright: Copyright © 1995-1999 by Apple Computer, Inc., All Rights Reserved.
-
- You may incorporate this Apple sample source code into your program(s) without
- restriction. This Apple sample source code has been provided "AS IS" and the
- responsibility for its operation is yours. You are not permitted to redistribute
- this Apple sample source code as "Apple sample source code" after having made
- changes. If you're going to re-distribute the source, we require that you make
- it clear in the source that the code was descended from Apple sample source
- code, but that you've made changes.
-
- Change History (most recent first):
- 8/17/1999 Karl Groethe Updated for Metrowerks Codewarror Pro 2.1
-
-
- */
- #include <Types.h>
- #include <Memory.h>
- #include <Quickdraw.h>
- #include <Fonts.h>
- #include <Events.h>
- #include <Menus.h>
- #include <Windows.h>
- #include <TextEdit.h>
- #include <Dialogs.h>
- #include <OSUtils.h>
- #include <ToolUtils.h>
- #include <SegLoad.h>
- #include <Movies.h>
- #include <DiskInit.h>
-
- // Show Movie Headers
- #include "MenuStuff.h"
- #include "WindStuff.h"
- #include "MovieStuff.h"
- #include "MoviePrefs.h"
-
- //----------------------------------------------
- // Prototypes
- //----------------------------------------------
-
- // Inititalization
- OSErr InitMacStuff(void);
- void InitGlobals(void);
- void KillGlobals(void);
-
- // Events
- void EventLoop (void);
-
-
- //==============================================
- // main
- //==============================================
-
- void main(void)
- {
- OSErr theErr;
-
- theErr = InitMacStuff();
- if (!theErr)
- {
- InitGlobals(); // initialise globals
-
- EventLoop(); // Call the main event loop.
-
- KillGlobals(); // Tear down any globals
-
- ExitToShell(); // Quit the application.
-
- }
-
- }
-
-
- //==============================================
- // Initialisation Stuff
- //==============================================
-
- //----------------------------------------------
- // InitMacStuff
- //
- // Initialise the Mac Tool Box and set up the memory
- //----------------------------------------------
-
- OSErr InitMacStuff(void)
- {
- long *appSize;
- OSErr theErr = noErr;
-
- // This decreases the application heap by 16k
- // (which increases the stack by 16k.)
- appSize = (long*)(GetApplLimit());
- SetApplLimit (appSize -16384);
-
- // Expand the heap so code segments load at the top.
- MaxApplZone();
-
- // allocate more master pointers
- MoreMasters();
- MoreMasters();
-
- // ****** Init Mac toolbox ******
- InitGraf (&qd.thePort);
- InitFonts();
- InitWindows();
- InitMenus();
- TEInit();
- InitDialogs(0L);
- InitCursor();
-
- // initialise movie toolbox
- theErr = EnterMovies();
- if (theErr)
- {
- DebugStr("\pError in initialising movie toolbox.");
- }
- return(theErr);
- }
-
- //----------------------------------------------
- // InitGlobals
- //
- // Initialise all "Show Movie" globals
- //----------------------------------------------
-
- void InitGlobals(void)
- {
- short windCount;
-
- // init the windows list
- for (windCount = 0; windCount < kMaxWindows; windCount++)
- gTheWinds[windCount] = nil;
-
- gDone = false; // Set the done flag
-
- InitMovieGlobals(); // init the movie globals
- InitMoviePrefs(); // init the movie prefs
- MenuBarInit(); // init menubar
- }
-
- //----------------------------------------------
- // KillGlobals
- //
- // Kills all "Show Window" Globals and closes the windows
- //----------------------------------------------
-
- void KillGlobals(void)
- {
- CloseAllWindows();
- KillMovieGlobals();
- KillMoviePrefs();
- }
-
- //==============================================
- // Event Loop and event handling
- //==============================================
-
- //----------------------------------------------
- // HandleMouseDown
- //
- // This looks after a mouse down. It works out where
- // the mouse has clicked and then deals with it
- // apropriately
- //----------------------------------------------
-
- void HandleMouseDown(EventRecord *eventPtr);
- void HandleMouseDown(EventRecord *eventPtr)
- {
- WindowPtr window;
- short thePart;
- long menuChoice;
-
- // Find out where the user has clicked
- thePart=FindWindow (eventPtr->where,&window);
- switch (thePart)
- {
- // Handle a click in the menu bar
- case inMenuBar:
- menuChoice = MenuSelect (eventPtr->where); // Displays menus and returns a selection
- DoMenuCommand(menuChoice); // Respond to the menu choice
- break;
-
- // In a desk accesory window, so let the system deal with it
- case inSysWindow:
- SystemClick(eventPtr,window);
- break;
-
- // In the title bar (drag region)
- // so drag the window around
- case inDrag:
- DragSelWind(window,eventPtr->where);
-
- // In the go away button
- // need to tracks the mouse and close the window if released in go away button
- case inGoAway:
- DoGoAwayWind(window,eventPtr->where);
- break;
-
- // In the windows content area
- case inContent:
- {
- // If this is not the front window, then bring the window to the front
- if (window!=FrontWindow())
- {
- SelectWindow(window);
- break;
- }
- }
- break;
- }
- }
-
-
- //----------------------------------------------
- // DoDiskEvt
- //
- // Handle disk inserted event
- //----------------------------------------------
-
- void DoDiskEvt(EventRecord *eventPtr);
- void DoDiskEvt(EventRecord *eventPtr)
- {
- short errResult;
- Point errPoint;
-
- if((HiWord(eventPtr->message)!=noErr))
- {
- SetPt(&errPoint,100,100);
- errResult=DIBadMount(errPoint,eventPtr->message);
- }
- }
-
- //----------------------------------------------
- // Event Loop
- //----------------------------------------------
-
- void EventLoop (void)
- {
- EventRecord event; // The event returned
- char theChar; // what character the user pressed
- long menuChoice; // Menu & item the user selected
-
- DoAdjustMenus(); // Adjust appropriately
-
- // Keep going until the user decides to quit (i.e. gDone = true)
- while (!gDone)
- {
- // Change the cursor to an arrow
- SetCursor( &(qd.arrow));
-
- // Receive every event from the system
- WaitNextEvent (everyEvent,&event,0,nil);
-
- // Do anything that the movies needs to do, including clicking
- // in the movie control
- if (!ServiceMovieTasks( FrontWindow(), &event ))
- {
-
- // If event still needs to handled then do switch
- switch (event.what)
- {
- // null event, do nothing
- case nullEvent:
- break;
-
- // user has clicked so deal with it
- case mouseDown:
- HandleMouseDown(&event);
- break;
-
- // user has pressed a key
- case keyDown:
- case autoKey:
-
- // Extract the key pressed
- theChar=event.message & charCodeMask;
-
- // If the Command key was down then compare it pass it
- if (event.modifiers & cmdKey)
- {
- menuChoice = MenuKey (theChar); // Find out what menu was selected by the keypress
- DoMenuCommand( menuChoice ); // Respond to the menu choice
- }
- break;
-
- // window needs to be updated, or redrawn
- case updateEvt:
- DoWindUpdate((WindowPtr)(event.message));
- break;
-
- // disk inserted event
- case diskEvt:
- DoDiskEvt(&event);
- break;
-
- // Operating system event
- case osEvt:
- break;
- }
- }
-
- }
-
- }
-